//活动选择
有n个需要在同一天使用同一个教室的活动a1, a2, …, an，教室同一时刻只能由一个活动使用。每个活动a[i]都有一个
开始时间s[i]和结束时间f[i]。一旦被选择后，活动a[i]就占据半开时间区间[s[i],f[i])。如果[s[i],f[i])和[s[j],f[j])互不重
叠，a[i]和a[j]两个活动就可以被安排在这一天。求使得尽量多的活动能不冲突的举行的最大数量。
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
    return a.second < b.second;
}
int greedyActivitySelector(const vector<pair<int, int>>& act) {
    // 贪婪策略：每次选择最早结束的活动
    int num = 1, i = 0;
    for (int j = 1; j < act.size(); j++) 
    {
        if (act[j].first >= act[i].second) 
        {
            i = j;
            num++;
        }
    }
    return num;
}

int main() {
    int number;
    cin >> number;
    vector<pair<int, int>> act(number);
    int idx = 0;
    for (int i = 0; i < act.size(); ++i) 
    {
        cin >> act[i].first >> act[i].second;
    }
    // 按照活动截止时间从小到大排序
    sort(act.begin(), act.end(), cmp);
    int ret = greedyActivitySelector(act);
    cout << ret << endl;
}